import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

// 博客系统的全局状态管理
export const useBlogStore = defineStore('blog', () => {
  // 文章列表，包含标题、作者、标签、摘要、内容等
  const articles = ref([
    { id: 1, title: 'Vue3 入门', author: '小明', tags: ['Vue3', '前端'], summary: '学习 Vue3 的基础知识。', content: '<p>这里是文章内容，支持 <b>富文本</b> 展示。</p>' },
    { id: 2, title: 'Pinia 状态管理', author: '小红', tags: ['Pinia', '状态管理'], summary: '如何在 Vue3 中使用 Pinia。', content: '<p>Pinia 是 Vue3 推荐的状态管理库。</p>' },
  ])
  // 评论列表，按文章 id 分类存储
  const comments = ref({
    1: [
      { id: 1, author: '小红', content: '写得很好！' },
      { id: 2, author: '小刚', content: '受教了~' }
    ],
    2: []
  })

  // 计算所有标签（去重）
  const allTags = computed(() => {
    const set = new Set()
    articles.value.forEach(a => a.tags.forEach(t => set.add(t)))
    return Array.from(set)
  })

  // 新增文章方法
  function addArticle(article) {
    article.id = Date.now() // 用时间戳生成唯一 id
    articles.value.unshift(article) // 新文章插入最前
    comments.value[article.id] = [] // 初始化评论数组
  }

  // 新增评论方法
  function addComment(articleId, comment) {
    if (!comments.value[articleId]) comments.value[articleId] = []
    comments.value[articleId].push({
      ...comment,
      id: Date.now() // 用时间戳生成唯一 id
    })
  }

  // 根据 id 获取指定文章
  function getArticleById(id) {
    return articles.value.find(a => a.id === Number(id))
  }

  // 获取指定文章的评论列表
  function getCommentsByArticleId(id) {
    return comments.value[id] || []
  }

  // 导出 state 和方法，供组件使用
  return {
    articles,
    comments,
    allTags,
    addArticle,
    addComment,
    getArticleById,
    getCommentsByArticleId
  }
}) 